package Mobile

import (
	"ali-hr/Database"
	"ali-hr/Models"
	"github.com/gookit/goutil/dump"
	"time"
)

/**
 * Created by Goland
 * User: wkk alisleepy@hotmail.com
 * Time: 2022/7/10 - 14:19
 * Desc: <描述信息>
 */

// GetMobileList 获取手机列表
func GetMobileList(filters map[string]interface{}, pageSize int, pageIndex int, all bool) ([]Models.Mobile, int) {
	// 定义手机列表
	var mobileData []Models.Mobile
	// 定义数据sql对象
	var Db = Database.SqlDB
	// 定义错误信息
	var err error
	// 手机个数
	var count int

	// 处理查询
	for key, val := range filters {
		if val == 0 || val == "" {
			continue
		}
		switch key {
		case "brand":
			Db = Db.Where("brand = ?", val)
		case "model":
			Db = Db.Where("model = ?", val)
		case "current_owner":
			Db = Db.Where("current_owner = ?", val)
		}
	}

	// 获取全部
	if all == true {
		err = Db.Find(&mobileData).Error
	} else {
		// 分页获取
		err = Db.Limit(pageSize).Offset((pageIndex - 1) * pageSize).Find(&mobileData).Error
	}
	if err != nil {
		dump.P("获取手机数据异常，错误信息err：", err)
		return nil, 0
	}

	// 个数
	Db.Count(&count)

	// 处理时间格式
	//if mobileData != nil {
	//	for index, val := range mobileData {
	//		// mobileData[index].CreatedAt = Util.ParseTime2Str(val.CreatedAt)
	//	}
	//}

	return mobileData, count
}

// AddMobile 添加手机
func AddMobile() {

}

// EditMobile 编辑手机
func EditMobile() {

}

// LendMobile 借出手机
func LendMobile(mobileId int, currentOwner string) bool {
	var mobile Models.Mobile
	var Db = Database.SqlDB
	var updateData = make(map[string]interface{})

	// 获取手机信息，校验是否存在
	err := Db.Where("id = ?", mobileId).Find(&mobile).Error
	if err != nil {
		dump.P("借出手机操作失败，手机不存在，mobile_id:", mobileId)
		return false
	}

	// 校验手机状态，只有空闲状态才可以借出
	if mobile.Status != Models.FreeStatus {
		dump.P("借出手机操作失败，当前手机状态：", mobile.Status)
		return false
	}

	// 借用手机：更新手机状态、借出时间、当前手机所属人，归还手机时间为null
	updateData["current_owner"] = currentOwner
	updateData["status"] = Models.LendStatus
	updateData["lend_time"] = time.Now()
	updateData["return_time"] = nil
	err2 := Database.SqlDB.Model(&mobile).Updates(updateData).Error
	if err2 != nil {
		dump.P("借出手机操作失败，更新手机状态失败，err2：", err2)
		return false
	}

	// 添加日志
	AddLog(currentOwner, Models.LendAction)
	return true
}

// ReturnMobile 换手机
func ReturnMobile(mobileId int) (bool, string) {
	// 定义
	var mobile Models.Mobile
	var Db = Database.SqlDB
	var updateData map[string]interface{}

	// 获取手机信息
	err1 := Db.Where("id = ?", mobileId).Find(&mobile).Error
	if err1 != nil {
		return false, "该手机不存在"
	}

	// 定义临时变量，存储当前操作人
	tempUser := mobile.CurrentOwner

	// 检查手机状态
	if mobile.Status != Models.LendStatus {
		return false, "该手机当前非已借出状态"
	}

	// 还手机，更新状态，更新多列，使用update操作，参数为map
	updateData["status"] = Models.FreeStatus
	updateData["CurrentOwner"] = ""
	updateData["LendTime"] = nil
	updateData["ReturnTime"] = time.Now()
	updateData["UpdatedAt"] = time.Now()
	err2 := Db.Model(&mobile).Updates(updateData).Error
	if err2 != nil {
		return false, "更新手机状态失败，请重试"
	}

	// 添加操作日志
	AddLog(tempUser, Models.ReturnAction)

	return true, "操作成功"
}

// GetUserList 获取用户列表
func GetUserList(filters map[string]interface{}) []Models.MobileUser {
	// 定义用户列表
	var mobileUsers []Models.MobileUser
	// 定义Mysql
	var Db = Database.SqlDB

	// 查询
	for key, val := range filters {
		if val == 0 || val == "" {
			continue
		}
		if key == "name" {
			Db = Db.Where("name = ?", val)
		}
	}

	// 获取用户列表
	err := Db.Find(&mobileUsers).Error
	if err != nil {
		dump.P("查询用户列表出错，err:", err)
		return nil
	}

	return mobileUsers
}

// AddLog 添加日志
func AddLog(userName string, action string) {
	var Db = Database.SqlDB
	var log Models.MobileLog

	log.UserName = userName
	log.Action = action
	log.CreatedAt = time.Now()
	log.UpdatedAt = time.Now()

	// 添加日志
	Db.Create(&log)
}
